import axios, { AxiosResponse } from 'axios'

import { ApiStatusCode } from '@/constants/apiStatusCode'

// 创建 axios 实例
export const http = axios.create({
  // 基础URL
  baseURL: import.meta.env.VITE_API_URL,
  // 请求超时时间
  timeout: import.meta.env.VITE_API_TIMEOUT,
  // 跨域请求时发送凭据（比如 cookies）
  withCredentials: true,
})

// 请求拦截器
http.interceptors.request.use(
  (config) => {
    return config
  },
  (error) => {
    return Promise.reject(error)
  },
)

// 响应拦截器
http.interceptors.response.use(
  (response: AxiosResponse) => {
    const { code, message, data } = response.data

    if (code === ApiStatusCode.SUCCESS) {
      return data
    } else {
      return Promise.reject(new Error(message || '请求失败'))
    }
  },
  (error) => {
    return Promise.reject(new Error(error.response))
  },
)
